package com.doubao.device.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.doubao.common.result.Result;
import com.doubao.device.dto.TagDTO;
import com.doubao.device.dto.request.CreateTagRequest;
import com.doubao.device.entity.SmartDeviceTag;
import com.doubao.device.entity.SmartDeviceTagRelation;
import com.doubao.device.mapper.SmartDeviceTagRelationMapper;

import java.util.List;

/**
 * 智能体标签服务接口
 */
public interface SmartDeviceTagService extends IService<SmartDeviceTag> {

    /**
     * 创建标签
     *
     * @param request 创建请求
     * @return 创建结果
     */
    Result<TagDTO> createTag(CreateTagRequest request);

    /**
     * 删除标签
     *
     * @param tagId 标签ID
     * @return 删除结果
     */
    Result<Void> deleteTag(Long tagId);

    /**
     * 获取标签详情
     *
     * @param tagId 标签ID
     * @return 标签详情
     */
    Result<TagDTO> getTagDetail(Long tagId);

    /**
     * 获取所有标签
     *
     * @return 标签列表
     */
    Result<List<TagDTO>> getAllTags();

    /**
     * 获取热门标签
     *
     * @param limit 数量限制
     * @return 热门标签列表
     */
    Result<List<TagDTO>> getHotTags(Integer limit);

    /**
     * 获取指定类型的标签
     *
     * @param type 标签类型
     * @return 标签列表
     */
    Result<List<TagDTO>> getTagsByType(String type);

    /**
     * 获取智能体关联的标签
     *
     * @param deviceId 智能体ID
     * @return 标签列表
     */
    Result<List<TagDTO>> getDeviceTags(Long deviceId);

    /**
     * 批量创建标签
     *
     * @param tagNames 标签名称列表
     * @param type 标签类型
     * @return 创建的标签ID列表
     */
    Result<List<Long>> batchCreateTags(List<String> tagNames, String type);

    /**
     * 添加设备标签关联
     *
     * @param deviceId 智能体ID
     * @param tagIds 标签ID列表
     * @return 添加结果
     */
    Result<Void> addDeviceTags(Long deviceId, List<Long> tagIds);

    /**
     * 移除设备标签关联
     *
     * @param deviceId 智能体ID
     * @param tagIds 标签ID列表
     * @return 移除结果
     */
    Result<Void> removeDeviceTags(Long deviceId, List<Long> tagIds);

    /**
     * 更新设备标签关联
     *
     * @param deviceId 智能体ID
     * @param tagIds 标签ID列表
     * @return 更新结果
     */
    Result<Void> updateDeviceTags(Long deviceId, List<Long> tagIds);

    /**
     * 增加标签使用次数
     *
     * @param tagId 标签ID
     * @return 更新结果
     */
    Result<Void> increaseUsedCount(Long tagId);

    /**
     * 获取关系Mapper
     */
    SmartDeviceTagRelationMapper getRelationMapper();
}